using System.Collections.Generic;

///<summary>
/// Basisklasse für die Ware, die zum Verkauf steht.
///</summary>
abstract class Verkaufsware
{
    /// <summary>
    /// Liste, die alle Waren beinhaltet 
    /// </summary>
    public static readonly List<Verkaufsware> warenliste = new List<Verkaufsware>();

    private string bezeichnung;
    private double preis;

    // Konstruktoren in abstrakten Klassen sind in der Regel protected.
    
    /// <summary>Konstruktor</summary>
    /// <param name="b">Bezeichnung</param>
    /// <param name="p">Preis</param>
    protected Verkaufsware(string b, double p)
    {
        bezeichnung = b;
        preis = p;

        warenliste.Add(this); // "this" zeigt auf das aktuelle Objekt, welches gerade durch den Konstruktor instanziiert wird.
        // heißt: In "this" steht die Speicheradresse des Objektes.
    }

    // ToString()-Methode überschreiben:
    
    ///<returns>
    /// Gibt einen String mit Bezeichnung und Preis der Ware zurück.
    ///</returns>
    public override string ToString()
    {
        return $"Bezeichnung: {bezeichnung} - Preis: {preis:C2}";
    }
}
